<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified">
	<xs:element name="class">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="name" type="xs:string" />
				<xs:element name="namespace" type="classnamespace" minOccurs="0" />
				<xs:element name="properties" type="properties" minOccurs="1" maxOccurs="1" nillable="false" />
				<xs:element name="put" type="procedure" minOccurs="0" maxOccurs="1" />
				<xs:element name="delete" type="procedure" minOccurs="0" maxOccurs="1" nillable="false" />
				<xs:element name="getAll" type="procedures" minOccurs="0" maxOccurs="1" />
				<xs:element name="getItem" type="procedures" minOccurs="0" maxOccurs="1" />
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="classnamespace">
		<xs:sequence>
			<xs:element name="preProject" type="xs:string" minOccurs="0" />
			<xs:element name="postProject" type="xs:string" minOccurs="0" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="properties">
		<xs:sequence>
			<xs:element name="property" type="property" minOccurs="1" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="property">
		<xs:attribute name="name" type="xs:string" use="required" />
		<xs:attribute name="type" type="proptype" use="required" />
		<xs:attribute name="readonly" type="xs:boolean" default="false" />
		<xs:attribute name="nullable" type="xs:boolean" default="false" />
		<xs:attribute name="access" type="propaccess" />
	</xs:complexType>
	<xs:simpleType name="propaccess">
		<xs:restriction base="xs:string">
			<xs:enumeration value="public" />
			<xs:enumeration value="protected" />
			<xs:enumeration value="private" />
			<xs:enumeration value="internal" />
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="proptype">
		<xs:restriction base="xs:string">
			<xs:enumeration value="string" />
			<xs:enumeration value="int" />
			<xs:enumeration value="DateTime" />
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="procedures">
		<xs:sequence>
			<xs:element name="procedure" type="procedure" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="procedure">
		<xs:sequence>
			<xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false" />
			<xs:element name="parameters" type="parameters" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="parameters">
		<xs:sequence>
			<xs:element name="parameter" type="parameter" minOccurs="1" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="parameter">
		<xs:attribute name="name" type="xs:string" use="required" />
		<xs:attribute name="type" type="proptype" use="required" />
		<xs:attribute name="direction" type="direction" use="required"/>
		<xs:attribute name="nullable" type="xs:boolean" use="required"/>
	</xs:complexType>
	<xs:simpleType name="direction">
		<xs:restriction base="xs:string">
			<xs:enumeration value="input" />
			<xs:enumeration value="output" />
		</xs:restriction>
	</xs:simpleType>
</xs:schema>